home *** CD-ROM | disk | FTP | other *** search
- Robert Seidel
- seidel@ifk.uni-jena.de
-
- Iterated Function Systems (kurz IFS)
-
-
- Viel Computernutzer denken bei dem Wort Fraktale an die berühmte
- Mandelbrotmenge, es gibt aber jedoch weitaus mehr Fraktalsorten
- und eine ganz besondere sind die Iterated Function Systems.
- Diese "iterierten Funktionssysteme" wurden von Michael Barnsley
- und seinen Kollegen entdeckt und haben einen weitaus größeren
- Nutzen für die heutigen Computer als viele andere Fraktalsorten.
-
- Diese ermöglichen nämlich eine der effektivsten Bild-
- komprimierungen, die selbst dem vielgelobten JPEG-Format an
- Qualität und Komprimierungsfaktor weit überlegen sind. So ist es
- zum Beispiel möglich einen Farn (FARN.IFS) mit nur sehr wenigen
- Werten (28 Werte x 4 Byte (SINGLE-Zahlen) = 112 Byte) zu
- beschreiben. Mit Hilfe eines Entpackers kann man aber ein
- SuperVGA-Bild (z.B. 800x600x256) erhalten, welches unkomprimiert
- fast ein halbes Megabyte Platz einnehmen würde.
- Der Komprimierungsfaktor beträgt dabei über 4200 zu 1! Wäre man
- in der Lage alle Daten so zu komprimieren, würde eine einzige
- HD-Diskette für die meisten Anwender ausreichen, man hätte dann
- 6 Gigabyte zur Verfügung!
-
- Dieses Programm kann leider nur fertige Werte entpacken, Michael
- Barnsley hat aber Wege gefunden jedes beliebige Bild so zu
- Komprimieren (sogar bis 10000 zu 1) und besitzt auch eine eigene
- Firma "Iterated Systems", die solche Programme und
- Programmiertools anbietet (siehe auch DOS International 7/95
- Seite 114/115). Dieses Verfahren scheint so gut zu sein, daß es
- inzwischen auch von anderen Herstellern genutzt wird, so z.B. in
- MS Encarta.
-
- Den Kern des Programmes stellt dabei die affine Abbildung
-
- │ x' │ │ a b ││ x │ │ e │
- │ │ = │ ││ │ + │ │
- │ y' │ │ c d ││ y │ │ f │
-
- dar. Diese läßt sich aber einfacher darstellen, und sie wird
- damit für uns und den Computer besser verständlich:
-
- x = a * xalt + b * yalt + e
- y = c * xalt + d * yalt + f
-
- Aus dieser Form wird ersichtlich, daß x und y die Koordinaten
- eines Punktes beschreiben. Diese berechnen sich aus den
- Koordinaten des alten Punktes (xalt/yalt) und den Werten von a,
- b, c, d, e und f. Die Werte von a, b, c und d sind für die
- Drehung (α) und die Schrumpfung/Vergrößerung (r) der alten
- Koordinaten verantwortlich, während die Variablen e und f eine
- Verschiebung gegenüber dem alten Punkt bewirken. a, b, c, und d
- können dann wie folgt berechnet werden:
-
- │ a b │ │ cos α -sin α │
- │ │ = r * │ │
- │ c d │ │ sin α cos α │
-
- Dies hört sich alles sehr kompliziert an, wenn man sich aber die
- Werte des Sierpinski-Dreiecks (SIER.IFS) genauer anschaut,
- erkennt man deren Bedeutung wesentlich schneller, während der
- Farn(FARN.IFS) etwas zu komplex dafür ist. Bei dem Dreieck
- erkennt man deutlich, daß jede Seite gegenüber der vorherigen um
- die Hälfte (0.5) verkleinert wurde. Ebenso erkennbar ist, daß
- die Verschiebungen ein Dreieck bilden.
- Neben diesen Werten, die das Bild beschreiben, taucht auch noch
- ein Wert p auf. Dieser stellt die Wahrscheinlichkeit (zwischen
- 0 und 1) dar, welche affine Abbildung wie oft genutzt wird. So
- beschreiben zum Beispiel die 4 affinen Abbildungen verschiedene
- Teile (Blätter, Sproßachse, ...) des Farns. Die Wahr-
- scheinlichkeit gibt dabei die "Wichtigkeit" der einzelnen Teile
- an, so haben die Blätter eine sehr hohe Wahrscheinlichkeit
- (0.85) und werden entsprechend schneller dargestellt. Würde man
- alle p auf 0.25 setzen, also alle Teile gleichwertig behandeln,
- würde das Farnbild erst nach sehr langer Zeit wie gewünscht
- aussehen.
-
- (Tabellenform :
- Kopf : a b c d e f p
- Werte: ... )
-
- Wer sich noch etwas genauer mit dem mathematischen Hintergrund
- beschäftigen möchte, dem seien die Bücher "Fraktale Geometrie
- von E.D. Schmitter", "Algorithmen für Chaos und Fraktale" von
- Dietmar Herrman und der Artikel des "PC Magazine" vom 8.
- November 1994 empfohlen. Das Freeware-Programm "FRACTINT" bietet
- ebenfalls noch mehr IFS-Werte, die sehr einfach übernommen
- werden können. Die Datei "FRACTINT.IFS" enthält verschiedene
- Werte, die durch Kommas in einem Editor getrennt werden müssen.
- Weiter müssen noch einige kleine Änderungen vorgenommen werden,
- dazu später eine genaue Beschreibung des IFS-Formates.
- Es lohnt sich im übrigen für jeden, der sich ein wenig für
- Fraktale interessiert "FRACTINT" genauer anzuschauen, zumal es
- kostenlos ist!
-
- Zum Programm:
-
- Das Programm IFS.BAS wurde für QBASIC geschrieben, ist aber auch
- ohne Änderungen unter PowerBASIC einsetzbar. Da PowerBASIC ein
- Compiler ist, erfolgt auch die Darstellung entsprechend
- schneller:
-
- Benchmark: Bild: "FARN.IFS" mit 32750 Punkten
-
- Rechner: Zeit in Sekunden: Faktor:
- QBASIC PowerBASIC 3.00c
- 486 SX 25 64.35 19.17 3.36
- 386 DX 16 205.15 9.55 21.48
-
- Dies zeigt nicht nur die Vorteile eines Compilers, sondern auch
- die eines Coprozessors bei mathematischen Berechnungen!
-
- Als Standard-Datentyp werden einfach genaue Zahlen (SINGLE)
- verwendet, die Schleifenzähler und einige andere Variablen sind
- aus Geschwindigkeitsgründen INTEGER-Zahlen (dies ist für unsere
- PASCAL/C-Freunde wichtig). Das Programm hat die IFS-Tabelle
- nicht fest integriert und ist somit wesentlich flexibler. Es
- greift auf Dateien mit der Endung "IFS" zu, diese sind wie folgt
- aufgebaut:
-
- Zeile: Beschreibung:
- 1. Name des IFS-Bildes (bei abstrakten Gebilden recht
- nützlich)
- 2. Anzahl(n) der affinen Abbildungen (nur durch
- Arrayspeicher begrenzt)
- 3. - n. Werte der affinen Abbildung durch Komma getrennt
- (a, b, c, d, e, f, p)
- (n+1). WINDOW-Koordinaten
-
- Die WINDOW-Koordinaten müssen für neue IFS-Bilder abgestimmt
- werden, somit wird aber die beste Wiedergabe erreicht. (Man kann
- die WINDOW-Werte auch berechnen lassen, dies wäre aber etwas zu
- komplex für dieses Programm.)
- 17 Tabellen mit IFS-Werten (für z.B. Farne, Bäume, Blätter,
- Cluster, Drachen, Sierpinski-Dreiecke und Teppiche und einige
- mehr) sind hier abgedruckt (siehe IFS-Dateien auf Diskette),
- dies sollte für den Anfang genügen. In den erwähnten Quellen
- finden sich aber noch weitere interessante Werte die durch
- dieses Dateiformat leicht vom Leser für das Programm zugänglich
- gemacht werden können. Man kann aber auch eigene Werte nutzen
- oder mit den gegebenen experimentieren.
- Eine Datei kann bei Programmstart ausgewählt werden, in
- PowerBASIC/QuickBASIC ist es auch möglich den Namen als
- Kommandozeilenparameter zu übergeben, da hier der Befehl
- "COMMAND$" zur Verfügung steht (im Listing IFS.BAS nur "'"
- entfernen). Zu beachten ist dabei nur, daß die Endung "IFS"
- nicht angegeben werden darf.
- Nachdem nun alle Werte eingelesen wurden, beginnt das Programm
- ein Bild zu berechnen und zu anzuzeigen. Dabei arbeitet es
- solange, bis der Nutzer eine Taste drückt. Da das Warten nach
- jedem gesetzten Punkt recht lange dauert, wird eigentlich nur
- alle 1000 Punkte überprüft, ob eine Taste gedrückt wurde. Dies
- geschieht in einer Schleife mit dem Zähler "speed" und bringt
- selbst auf schnellen Rechnern deutliche Geschwindigkeits-
- vorteile. Man sollte schon eine Weile auf das Bild warten, meist
- werden dann erst alle Details erkennbar. Zum Beispiel sehen die
- Sierpinski-Figuren (Teppich und Dreieck) erst nach längerem
- ungestörten Rechnen perfekt aus.
- Vor der Zeile "PSET(x, y), col" kann man der Farbvariablen "col"
- einen Wert zuweisen. Dieser kann konstant (beim Farn z.B. grün),
- zufällig oder nach einer eigenen Formel bestimmt sein. Mit guten
- Formeln, einer SVGA-Auflösung und einer guten Palette sind die
- Bilder sicherlich kaum vom natürlichen Original zu unter-
- scheiden. (Ich besitze leider nur einen SW-Bildschirm, so bleibt
- mir dieser Farbgenuß leider verwehrt.) Da der Quellcode leicht
- verständlich ist, auch wenn die mathematische Seite nicht 100
- prozentig durchschaut wurde, bietet sich die Implementierung von
- neuen Features (SVGA-Darstellung, kleines Menüsystem, Assembler-
- algorithmen, Bildkomprimierung (?!?)) geradezu an. Viel Spass
- beim Tüfteln!
-